Перейти к основному содержимому

Компилятор Clang. Первая программа на Linux

Что такое Clang

Clang — современный компилятор для языков C, C++ и Objective-C, часть проекта LLVM. Основные преимущества:

  • Быстрая компиляция
  • Понятные сообщения об ошибках
  • Совместимость с GCC
  • Кроссплатформенность

Установка Clang

sudo apt update
sudo apt install clang

Проверка установки:

clang --version

Первая программа

hello.c
#include <stdio.h>

int main(void) {
printf("Hello, Linux!\n");
return 0;
}

Компиляция и запуск

Базовая компиляция

clang hello.c -o hello
./hello

Флаги компиляции

ФлагОписаниеПример
-oИмя выходного файлаclang hello.c -o program
-WallВсе предупрежденияclang -Wall hello.c
-gОтладочная информацияclang -g hello.c
-O2Оптимизацияclang -O2 hello.c
-std=c11Стандарт C11clang -std=c11 hello.c

Процесс компиляции

graph LR
A[hello.c] -->|Препроцессор| B[hello.i]
B -->|Компилятор| C[hello.s]
C -->|Ассемблер| D[hello.o]
D -->|Линковщик| E[hello]
style A fill:#f9f,stroke:#333
style E fill:#9f9,stroke:#333
Совет

Можно посмотреть промежуточные этапы:

  • Препроцессинг: clang -E hello.c
  • Ассемблерный код: clang -S hello.c
  • Объектный файл: clang -c hello.c

Отличия Clang от GCC

ХарактеристикаClangGCC
Скорость компиляции✅ БыстрееМедленнее
Сообщения об ошибках✅ Понятные, с подсветкойМенее наглядные
Потребление памяти✅ МеньшеБольше
Оптимизация кодаХорошая✅ Иногда лучше

Полезные команды

  • clang --help — справка по командам
  • man clang — подробная документация
  • clang -v hello.c — подробный вывод процесса компиляции
  • ldd hello — просмотр зависимостей программы
Важно

Всегда используйте флаг -Wall при разработке для выявления потенциальных проблем в коде.

Типичные ошибки компиляции

Ошибка: undefined reference

/tmp/hello-abc123.o: In function `main':
hello.c:(.text+0x15): undefined reference to `some_function'

Причина: Функция объявлена, но не определена или не подключена библиотека.

Решение: Проверьте подключение библиотек (-l флаг) или реализацию функции.

Ошибка: implicit declaration

hello.c:4:5: warning: implicit declaration of function 'printf'

Причина: Не подключён нужный заголовочный файл.

Решение: Добавьте #include <stdio.h>

Дополнительные материалы